# docker swarm COMMAND
容器集群管理器,使用户可以很容易地部署跨主机的容器集群服务。采用"主从"结构,通过Raft协议在多个管理节点实现共识。工作节点上运行agent接受管理节点的统一管理和任务分配,用户提交服务请求只需要发给管理节点即可,管理节点会按照调度策略在集群中分配节点来运行服务相关的任务。
manager-worker
# 1 基本概念
# 1.1 Swarm集群(Cluster)
Swarm集群(Cluster)为一组被统一管理起来的docker主机。集群是swarm所管理的对象。主机之间通过docker引擎的swarm模式沟通,管理节点(可以有多个)响应外部请求,工作节点运行docker容器,同一个主机可以同时为管理节点和工作节点。
Swarm集群使用:定义服务(指定状态、复制个数、网络、存储、暴露端口等)->管理节点发出启动服务的指令->管理节点按服务规则调度->在集群中启动整个服务并确保正常运行
# 1.2 节点(Node)
节点(Node)是swarm集群的最小资源单位,每个节点其实就是一台docker主机。
节点分为:
- 管理节点(manager node): 负责对外,管理集群中资源,分发任务给工作节点。多个管理节点通过Raft协议构成共识,所以管理节点数推荐奇数。
- 工作节点(worker node):负责执行管理节点安排的具体任务。默认情况下,管理节点也是工作节点。工作节点运行代理(agent)来汇报任务完成情况。
# 1.3 服务(Service)
服务(service)是docker支持复杂多容器协作场景的利器。
- 服务由若干任务组成,每个任务为某个具体的应用。
- 服务类型有两种,可以通过-mode指定:
- 复制服务(replicated services)模式:默认模式,每个任务存在若干副本,用-replicas参数设置副本数量。
- 全局服务(global services)模式:调度器将在每个可用节点都执行一个相同的任务,一般用来运行节点的检查或应用监控之类的
# 1.4 任务(Task)
任务是Swarm集群中最小的调度单位,即一个指定的应用容器。生命周期:创建(new)->等待(penging)->分配(assigned)->接受(accepted)->准备(preparing)->开始(starting)->运行(running)->完成(complete)->失败(failed)->关闭(shutdown)->拒绝(rejected)->孤立(orphaned)
任务分配到工作节点后,不再支持迁移。
# 1.5 服务的外部访问
外部通过端口映射来访问集群中的服务。SWarm中支持入口负载均衡(ingress load balancing)的映射模式。此模式下,每个服务都会被分配一个公开端口(PublishedPort),该端口在集群中任意节点都可以访问到。
当有请求发送到任意节点的公开端口时,该节点若没有实现执行服务相关的容器,会通过路由机制将请求转发给实际执行服务容器的工作节点。
# 2 使用swarm
# 2.1 集群命令
docker swarm ca
:显示或旋转(更换)根CAdocker swarm init
:初始化集群。docker swarm join-token
:管理tokens(manager|worker)。docker swarm join
:添加新节点到集群。docker swarm leave
:离开集群docker swarm unlock-key
:管理unlock keydocker swarm unlock
:unlock集群docker swarm update
:update集群
# 2.2 集群命令详解
# 2.2.1 docker swarm ca
格式
# docker swarm ca [options] #查看ca docker swarm ca #更换ca docker swarm ca --rotate
选项
- --ca-cert 指定集群根CA certificate证书的路径。
- --ca-key 指定集群根CA key证书的路径。
- --cert-expiry ca证书的有效期(ms|us|ms|s|m|h),默认值2160h。
- --detach, -d 立即退出而不待待
- --external-ca 一个或多个签名端点规范
- --quiet, -q 关闭进度输出
- --rotate 旋转(更换)CA证书,如果不提供将重新生成
# 2.2.2 docker swarm init
格式
# docker swarm init [options] docker swarm init docker swarm init --advertise-addr 192.168.100.201
选项
- --advertise-addr 广播地址(格式:<ip|interface>[:port])
- --autolock 启用管理器自动锁(要求解密key来启动已停止的管理器)
- --availability 节点的可用性("active"(default)|"pause"|"drain")
- --cert-expiry 节点证书有效期(ns|us|ms|s|m|h)(default:2160h0m0s)
- --listen-addr 监听地址(格式:<ip|interface>[:port]),default:0.0.0.0:2377
- --data-path-addr
- --data-path-port
- default-addr-pool
- --default-addr-pool-mask-length
- dispatcher-heartbeat
- --external-ca
- --force-new-cluster
- --max-snapshots
- --snapshot-interval
- --task-history-limit
# 2.2.3 docker swarm join-token
格式
# 管理join tokens # docker swarm join-token [options] (worker|manager) #查看worker join token docker swarm join-token worker #查看manager join token docker swarm join-token manager #更换worker join token docker swarm join-token --rotate worker #更换manager join-token docker swarm join-token --rotate manager #只显示worker join token docker swarm join-token -q worker #只显示manager join token docker swarm join-token -q worker
选项
- --quiet, -q 只显示token
- --rotate Rotate join token
# 2.2.4 docker swarm join
格式
# 以manager或worker身份加入群集 # docker swarm join [options] host:port docker swarm join --token SWMTKN-1-2bprkl8eajkzcf81lnvcj9fvoerk7z4umx5dgw1kkmiv9nisar-bmgd5bz0o42qexg6lgv31vpg5 10.16.0.104:2377
选项
- --advertise-addr 广播地址(格式:<ip|interface>[:port])
- --availability 节点的可用性("active"(default)|"pause"|"drain")
- --data-path-addr 数据流量使用的地址或网卡接口(格式:<ip|interface>)
- --listen-addr 监听地址(format:<ip|interface>[:port]),默认值:0.0.0.0:2377
- --token 加入集群的token(根据token自动识别是manager|worker)
# 2.2.5 docker swarm leave
格式
# 离开集群 # docker swarm leave [options] # 如果是manager要离开,先把manager降为worker再离开 docker node demote docker swarm leave
选项
- --force, -f 强制离开集群(一般不用)
# 2.2.6 docker swarm unlock-key
格式
# 管理unlock key,只在manager执行 # docker swarm unlock-key [options] #view unlock key docker swarm unlock-key #only view unlock key docker swarm unlock-key -q #rotate manager unlock key docker swarm unlock-key --rotate
选项
- --quiet, -q 只显示key
- --rotate Rotate unlock key
# 2.2.7 docker swarm unlock
格式
# 用unlock key解锁一个锁定的manager,只在manager执行 # docker swarm unlock docker swarm unlock Please enter unlock key:
# 2.2.8 docker swarm update
格式
#更新集群配置 # docker swarm update [options] docker swarm update --cert-expiry 7200h docker swarm update --autolock false
选项
- --autolock 更改manager的autolock设置(true|false)
- --cert-expiry 设置节点证书的有效期(ns|us|ms|s|m|h),default:2160h0m0s
- --dispatcher-heartbeat 设置调度器的心中周期(ns|us|ms|s|m|h),default:5s
- --external-ca 一个或多个证书签名端点的规范
- --max-snapshots 要保留的额外Ratf快照数
- --snapshot-interval Raft快照之间的日志条目数量,默认10000
- --task-history-limit 任务历史保留限制,默认5